package Algorithm.Lambda;

/**
 * ClassName:LambdaText002
 * Package:Algorithm.Lambda
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/4-18:55
 * @Version:v1.0
 */
public class LambdaText002 {
    /*
     * 函数式编程(是一种思想特点)
     * 面向对象：先找对象,让对象做事情
     *
     * 函数式编程思想,忽略面向对象的复杂语法,强调做什么,而不是谁去做
     *
     * Lambda表达式就是函数式思想的体现
     *
     * ()->{}
     * ():对应着方法的形参
     * ->:固定格式
     * {}:对应着方法的方法体*/

    /*
     * Lambda表达式可以用来简化匿名内部类的书写
     * Lambda表达式只能简化函数式接口的匿名内部类的书法
     * 函数式接口：
     *   有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@FunctionalInterface注解*/
    public static void main(String[] args) {
        //利用匿名内部类的形式去调用下面的方法

        method(new Swim() {
            @Override
            public void swimming() {
                System.out.println("正在游泳");
            }
        });

        //利用lambda表达式进行改写
        method(
                () -> {
                    System.out.println("正在游泳");
                }
        );
    }

    public static void method(Swim s) {
        s.swimming();
    }
}

interface Swim {
    public abstract void swimming();
}